package com.cskaoyan.javase.array._2memory;

import javax.swing.*;

/**
 * 定义两个数组：
 * - 静态初始化一个数组，输出数组名，元素取值，长度
 * - 然后声明第二个数组，把第一个数组的地址赋值给第二个数组。
 * - 输出第二个数组的数组名，元素取值，长度
 * - 然后给第二个数组赋值，再次输出两个数组的名及元素
 *
 * @since 10:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo5 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        // 把引用arr中的地址赋值给arr2，那么这两个引用指向同一个对象
        int[] arr2 = arr;
        System.out.println(arr);
        System.out.println(arr2);

        /*
            ==连接引用，比较的是引用中的地址，比较的是两个引用是否指向同一个对象
            如果是同一个对象，返回true
            否则返回false
            这个比较条件是比较苛刻的，说白了就是"只有自己才和自己相等"
         */
        System.out.println(arr == arr2);

        // 使用new关键字创建不同的对象，是一个独立的对象，地址不可能相同
        int[] arr3 = new int[2];
        System.out.println(arr3);
        System.out.println(arr3 == arr2);

        // 多个引用指向同一个对象，相当于有了多个名字，无论哪个引用修改对象中元素的取值，用别的引用再次访问都会看到修改后的结果
        arr[0] = 666;
        System.out.println(arr2[0]);

        // 对象之间是独立的，操作不会互相影响（除非它们之间有关联）
        System.out.println(arr3[0]);


        String str1 = new String("123");
        String str2 = new String("123");
        // ==比较地址，new关键字会创建新的对象，所以虽然都是字符串123，但是==返回false
        System.out.println(str1 == str2);

        // 补充,如何比较字符串对象的内容相等呢?
        // 使用:  字符串对象.equals(另一个字符串对象) 用来比较两个字符串的内容,只要是相同内容,就返回true
        System.out.println(str1.equals(str2));
    }
}
